package airtun

/*************************************上线请求**************************************/
// 上行
type AirtunConnFileInfo struct {
	Sha  string `json:"sha1"`
	Size int64  `json:"size"`
}
type AirtunConnFilesInfo map[string]AirtunConnFileInfo
type AirtunConn struct {
	Files AirtunConnFilesInfo `json:"files" mapstructure:"files"`
}
type airtunUpConn struct {
	Action string     `json:"action" mapstructure:"action"`
	Conn   AirtunConn `json:"conn" mapstructure:"conn"`
}

//下行
type AirtunConAckFileInfo struct {
	Upload bool `json:"upload" mapstructure:"upload"`
}
type AirtunConAckFilesInfo map[string]AirtunConAckFileInfo
type AirtunConAck struct {
	Files AirtunConAckFilesInfo `json:"files" mapstructure:"files"`
}
type airtunDownConAck struct {
	Action string       `json:"action" mapstructure:"action"`
	ConAck AirtunConAck `json:"conack" mapstructure:"conack"`
}

/***************************************************************************/

/*************************************文件上传请求**************************************/
type AirtunFile struct {
	// 文件名称
	Name string `json:"name" mapstructure:"name"`
	// 若文件小于等于2048个字节,可单次直接上报
	Body string `json:"body" mapstructure:"body"` // 需要base64编码
	// 否则需要分段上传,每次分段1024字节.
	Frag int `json:"index" mapstructure:"index"`
	// 是否为最后一段
	End bool `json:"end" mapstructure:"end"`
	// 总文件大小是多少
	Size int64 `json:"size" mapstructure:"size"`
}
type AirtunUpFile struct {
	Action string     `json:"action" mapstructure:"action"`
	Upload AirtunFile `json:"upload" mapstructure:"upload"`
}

/***************************************************************************/

/*************************************文件上传请求**************************************/
type AirtunHttpRequest struct {
	Id      string            `json:"id" mapstructure:"id"`           // 该请求的id,上报resp时需要带上
	Method  string            `json:"method" mapstructure:"method"`   // 服务器强制会转大写再下发
	Uri     string            `json:"uri" mapstructure:"uri"`         //
	Headers map[string]string `json:"headers" mapstructure:"headers"` // 下面的所有字段,都是可选的, 不一定下发
	Json    map[string]string `json:"json" mapstructure:"json"`       // 如果content-type是json  // body解析为json字符串再下发, 会提前校验值
	Form    map[string]string `json:"form" mapstructure:"form"`       // 如果有请求参数,会放在这个字段里 // 如果没有参数, 这个form会不存在
	Body    string            `json:"body" mapstructure:"body"`       // 不认识的数据, base64编码后下发, 原始数据不超过2048字节
}
type airtunDownHttpRequest struct {
	Action string            `json:"action" mapstructure:"action"`
	Req    AirtunHttpRequest `json:"req" mapstructure:"req"`
}

type AirtunHttpRespond struct {
	Id      string            `json:"id" mapstructure:"id"`           // 该请求的id,上报resp时需要带上
	Code    string            `json:"code" mapstructure:"code"`       // 服务器强制会转大写再下发
	Headers map[string]string `json:"headers" mapstructure:"headers"` // 下面的所有字段,都是可选的, 不一定下发
	Body    string            `json:"body" mapstructure:"body"`       // 不认识的数据, base64编码后下发, 原始数据不超过2048字节
}
type airtunUpHttpRespond struct {
	Action string            `json:"action" mapstructure:"action"`
	Resp   AirtunHttpRespond `json:"resp" mapstructure:"resp"`
}

/***************************************************************************/

/*************************************心跳请求**************************************/
type airtunUpPingRequest struct {
	Action string `json:"action" mapstructure:"action"`
}
type airtunDownPingRequest struct {
	Action string `json:"action" mapstructure:"action"`
}

/***************************************************************************/
